import { defineStore } from "pinia";

const baseUrl = "https://wxapi.xiaoyiwl.cn";

// 导出一个仓库，用于用户登录类
export const useAuthStore = defineStore("auth", {
  // 全局数据
  state: () => ({
    userInfo: {}, // 用户信息
    isLogin: false, // 登录状态
    isLoading: false, // 加载状态
    token: "", //token
  }),

  // 全局的执行数据方法
  actions: {
    /**
     * 微信小程序登录方法
     * @param {Object} loginData 登录数据 (包含微信code 等必要参数)
     * @return {Promise} 包含登录结果的promise
     */

    async login(code) {
      // 初始状态重置
      this.isLoading = true;
      this.error = null;

      try {
        uni.showLoading({
          title: "登录中...",
          mask: true,
        });
        // 1. 参数验证
        if (!code || typeof code !== "string") {
          throw new Error("无效的登录参数：缺少有效的code值");
        }

        // 发送登录请求
        const res = await uni.request({
          url: `${baseUrl}/WechatLogin.php`,
          method: "GET",
          data: {
            code: code,
          },
          timeout: 8000,
          dataType: "json",
        });

        // console.dir(res);  res.data.data.token  取得 token   uid 取得uid  过期时间 expires_in 604800

        // 处理成功相应
        uni.hideLoading();

        // 7. 存储认证信息
        console.log("登录返回内容");

        console.log(res);
        try {
          uni.setStorageSync("token", res.data.data.token);
          uni.setStorageSync("uid", res.data.data.uid);
          uni.setStorageSync("isLogin", true);
          this.token = res.data.data.token;
          this.isLogin = true;
        } catch (storageError) {
          console.error("本地存储失败:", storageError);
          throw new Error("本地认证信息保存失败");
        }

        // 8. 更新UI状态
        uni.showToast({
          title: "登录成功！",
          icon: "success",
          duration: 3000,
        });

        // 9. 返回有效数据
      } catch (error) {
        // 统一错误处理
        const errorMessage = error.message || "登录失败，请稍后重试";
        this.error = errorMessage;

        uni.showToast({
          title: errorMessage,
          icon: "none",
          duration: 3000,
        });

        throw error; // 继续向上抛出错误
      } finally {
        // 确保清理状态
        uni.hideLoading();
        this.isLoading = false;
      }
    },

    /**
     *
     * @param {string} token
     * 根据用户 code 请求用户数据
     */
    //  应该 将本地的token 一同发送到后端。 解码token后取得用户id 然后根据id 就可以获取用户信息 并返回
    async getUserInfo(token) {
      const _this = this
      try {
        uni.showLoading({
          title: "请求用户数据中...",
          mask: true,
        });
        const token = uni.getStorageSync("token");

        // console.log('获取用户token');

        // 定义请求配置对象

        const config = {
          url: `${baseUrl}/WechatUserInfo.php?token=${token}`, // 替换为实际的后端 API 地址
          method: "GET", // 根据实际需求修改请求方法，如 POST、PUT 等
          header: {
            // 设置 Authorization 请求头，格式为 "Bearer <token>"
            Authorization: `Bearer ${token}`,
          },

          success: function (res) {
            console.log("请求成功:", res);
            uni.setStorageSync("userInfo", res.data.data.userInfo);
            _this.userInfo = res.data.data

          },
          fail: function (err) {
            console.error("请求失败:", err);
          },
        };
        console.log("准备发出请求");

        const userInfo = await uni.request(config);
        console.log("这一步代表请求成功了");


        uni.hideLoading();
        uni.showToast({
          title: "获取完毕",
          mask: true,
          timeout: 2000,
        });
      } catch (err) {
        this.error = err;
      }
    },
  },
  getters: {
    currentUser: (state) => state.userInfo,
    authStatus: (state) => state.isLogin,
  },
});
